package attend.action.dept;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

import attend.UserContainer.User;
import attend.com.CodeMetrix;
import attend.com.Session;
import attend.dao.common.CommonDao;
import attend.dao.dept.DeptDao;
import dao.Paging.PagingDAO;
import exception.BaseException;

public class DeptAction extends Session {
	/*******************MEMBER FIELD DEFINDE S T A R T*****************************/
	//부서관리 메인 화면 조회
	private List<HashMap<String, String>> 	list;
	
	//사업그룹들 중 use_yn='y'인 데이터만 가져와 담는  list이다.
	private List<HashMap<String,String>> 	list_group 			= 	null;	//select list
	
	//그룹수정시 사용되는 필드
	private List<HashMap<String , String>> list_select_group 	= 	null;
	
	//팀수정시 사용되는 필드
	private List<HashMap<String, String>> 	list_group_team 	=	null;

	private int 							upper_dept_no;
	private int 							dept_no;
	private String							upper_dept_nm;
	private String							dept_nm;
	private String							use_yn;

	
	//그룹수정시 리턴 메시지
	private String 								rtn_msg;
	
	private int									rowCount;
	
	private PagingDAO							pDao;

	private int 								cur_page	=	1;

	private int 								start_row;

	private int 								end_row;

	private User user;
	/*******************MEMBER FIELD DEFINDE E N D*****************************/
	
	
	/*******************MEMBER METHOD DEFINDE S T A R T*****************************/
	

	/**
	 * <pre>
	 * 액션 디폴트 실행 메소드
	 * 부서조회 - 페이지 로딩시에 바로 조회 됨.
	 * </pre>
	 * @return
	 * @throws BaseException exception.BaseException
	 * @throws SQLException 
	 * @throws SQLException java.sql.SQLException
	 */
	public String execute() throws BaseException, SQLException {
		
//		DeptDao dao = new DeptDao();
//		
//		dao.deptSearch();
//		
//		list = dao.getList();
		
		return SUCCESS;
	}
	
	/**
	 * 사업그룹 등록/수정 팝업 화면
	 * @return String - success
	 * @throws BaseException
	 * @throws SQLException 
	 */
	public String dept_mgr_group_reg_mod_p() throws BaseException, SQLException {
		
		DeptDao dao = new DeptDao();
		
		//js에서 parameter value들을 넘겨 db의 내용을 가져온다.
		//upper_dept_no를 가져오지 않을 경우 0값을 가짐.
		//500 error 안나게 처리함.
		if (upper_dept_no != 0) {
			
			dao.retireveUpperDeptNoByUpperDeptNo(upper_dept_no);
			
			list_select_group 	= 	dao.getList();	//그룹코드,그룹명,사용여부
			
			upper_dept_no 		= 	Integer.parseInt(list_select_group.get(0).get("upper_dept_no"));	//int로 형변환
			upper_dept_nm		= 	list_select_group.get(0).get("upper_dept_nm");
			use_yn				= 	list_select_group.get(0).get("use_yn");
		}

		return SUCCESS;
	}
	
	/**
	 * 팀(부서) 등록/수정 팝업
	 * 반드시 dao 메소드를 실행해야 한다.
	 * 
	 * @return
	 * @throws BaseException
	 * @throws SQLException 
	 */
	public String dept_mgr_team_reg_mod_p() throws BaseException, SQLException {
		
		CommonDao commonDao = new CommonDao();
		
		//dao method를 반드시 실행해야 함.
//		commonDao.retrieveGroupByUseY();
		commonDao.retrieveGroupList(CodeMetrix.ALL);
		
		list_group = commonDao.getList();
		//upper_dept_no를 가져오지 않을 경우 0값을 가짐.
		//팀등록일 경우만 처리되게 함.
		if (upper_dept_no != 0 && dept_no != 0) {
			
			//팀수정시 필요한 그룹코드/명 , 팀코드/명
			DeptDao dao 	= new DeptDao();
			
			dao.retrieveTeamByUpperDeptNoDeptNo(upper_dept_no , dept_no);
			
			list_group_team = dao.getList();
			
			//list객체안에 담긴  hashmap객체안의 기본자료형을 접근하기 위한 부분.
			upper_dept_nm 	= getList_group_team().get(0).get("upper_dept_nm");	//그룹코드
			dept_nm 		= getList_group_team().get(0).get("dept_nm");		//그룹명
			use_yn 			= getList_group_team().get(0).get("use_yn");		//사용여부
		}
		return SUCCESS;
	}
	
	/**
	 * 팀(부서) 등록/수정 팝업
	 * 반드시 dao 메소드를 실행해야 한다.
	 * 
	 * @return
	 * @throws BaseException
	 * @throws SQLException 
	 */
	public String dept_mgr_team_reg_mod_pp() throws BaseException, SQLException {
		
		CommonDao commonDao = new CommonDao();
		
		//dao method를 반드시 실행해야 함.
//		commonDao.retrieveGroupByUseY();
		commonDao.retrieveGroupList();
		
		list_group = commonDao.getList();
		//upper_dept_no를 가져오지 않을 경우 0값을 가짐.
		//팀등록일 경우만 처리되게 함.
		if (upper_dept_no != 0 && dept_no != 0) {
			
			//팀수정시 필요한 그룹코드/명 , 팀코드/명
			DeptDao dao 	= new DeptDao();
			
			dao.retrieveTeamByUpperDeptNoDeptNo(upper_dept_no , dept_no);
			
			list_group_team = dao.getList();
			
			//list객체안에 담긴  hashmap객체안의 기본자료형을 접근하기 위한 부분.
			upper_dept_nm 	= getList_group_team().get(0).get("upper_dept_nm");	//그룹코드
			dept_nm 		= getList_group_team().get(0).get("dept_nm");		//그룹명
			use_yn 			= getList_group_team().get(0).get("use_yn");		//사용여부
		}
		return SUCCESS;
	}
	
	/**
	 * <pre>
	 * 사업그룹 수정 Action
	 * upper_dept_no : 그룹코드
	 * upper_dept_nm : 그룹명
	 * use_yn        : 사용여부
	 * </pre>
	 * @return String -success
	 * @throws BaseException
	 * @throws SQLException
	 */
	public String updateGroup() throws BaseException , SQLException {
		DeptDao dao = new DeptDao();
		
		/**
		 * Parameter mapping
		 * upper_dept_no : 그룹코드
		 * upper_dept_nm : 그룹명
		 * use_yn        : 사용여부
		 */
		dao.updateUpperDept(upper_dept_no, upper_dept_nm, use_yn);
		
		setRtn_msg(dao.getRtn_msg());	//저장프로시저에서 출력되는 메시지
		
		return SUCCESS;
	}
	
	/**
	 * 팀 등록
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 */
	public String updateTeam() throws BaseException , SQLException {
		
		DeptDao dao = new DeptDao();
		
		/**
		 * Parameter mapping
		 * upper_dept_no : 그룹코드
		 * dept_no		 " 팀 코드
		 * upper_dept_nm : 그룹명
		 * use_yn        : 사용여부
		 */
		dao.updateLowerDept(upper_dept_no , dept_no , dept_nm , use_yn);
		
		setRtn_msg(dao.getRtn_msg());	//저장프로시저에서 출력되는 메시지
		
		return SUCCESS;
	}
	
	/**
	 * <pre>
	 * 부서관리-결과 조회되는 action
	 * ajax로 구현되어     전체화면 리프레쉬 없이 바로 적용됨.
	 * </pre>
	 * @return
	 * @throws BaseException
	 * @throws SQLException
	 */
	public String retrieveDeptList() throws BaseException , SQLException {
		
		DeptDao dao = new DeptDao();
		
		/**********************************************************************************/
		
		//total row count
		dao.countDeptRow();
		
		rowCount		=			dao.getRowCount();
		
		//paging
		pDao 			= 			new PagingDAO(15 , 10 , rowCount , cur_page);				//페이징 처리 DAO
		
		start_row 		= 			pDao.getWriting_Start();				//시작 페이지 1
	    end_row   		= 			pDao.getWriting_End();					//끝페이지
	    
		/**********************************************************************************/

		
		dao.deptSearch(start_row , end_row );
		
		list = dao.getList();
		
		return SUCCESS;
	}
	
	/*******************MEMBER METHOD DEFINDE E N D*****************************/
	
	/****************************GETTER / SETTER START************************/

	public List<HashMap<String, String>> getList() {
		return list;
	}

	public void setList(List<HashMap<String, String>> list) {
		this.list = list;
	}

	public void setList_group(List<HashMap<String,String>> list_group) {
		this.list_group = list_group;
	}

	public List<HashMap<String,String>> getList_group() {
		return list_group;
	}

	public List<HashMap<String, String>> getList_group_team() {
		return list_group_team;
	}

	public void setList_group_team(List<HashMap<String, String>> list_group_team) {
		this.list_group_team = list_group_team;
	}

	public int getUpper_dept_no() {
		return upper_dept_no;
	}

	public void setUpper_dept_no(int upper_dept_no) {
		this.upper_dept_no = upper_dept_no;
	}

	public void setDept_no(int dept_no) {
		this.dept_no = dept_no;
	}

	public int getDept_no() {
		return dept_no;
	}
	
	public String getRtn_msg() {
		return rtn_msg;
	}

	public void setRtn_msg(String rtn_msg) {
		this.rtn_msg = rtn_msg;
	}

	/**
	 * @return the use_yn
	 */
	public String getUse_yn() {
		return use_yn;
	}

	/**
	 * @param use_yn the use_yn to set
	 */
	public void setUse_yn(String use_yn) {
		this.use_yn = use_yn;
	}

	/**
	 * @return the upper_dept_nm
	 */
	public String getUpper_dept_nm() {
		return upper_dept_nm;
	}

	/**
	 * @param upper_dept_nm the upper_dept_nm to set
	 */
	public void setUpper_dept_nm(String upper_dept_nm) {
		this.upper_dept_nm = upper_dept_nm;
	}

	/**
	 * @return the dept_nm
	 */
	public String getDept_nm() {
		return dept_nm;
	}

	/**
	 * @param dept_nm the dept_nm to set
	 */
	public void setDept_nm(String dept_nm) {
		this.dept_nm = dept_nm;
	}	
	
	public int getRowCount() {
		return rowCount;
	}

	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}


	public PagingDAO getPDao() {
		return pDao;
	}

	public void setPDao(PagingDAO dao) {
		pDao = dao;
	}

	public int getStart_row() {
		return start_row;
	}

	public void setStart_row(int start_row) {
		this.start_row = start_row;
	}

	public int getEnd_row() {
		return end_row;
	}

	public void setEnd_row(int end_row) {
		this.end_row = end_row;
	}
	
	public int getCur_page() {
		return cur_page;
	}

	public void setCur_page(int cur_page) {
		this.cur_page = cur_page;
	}

	@Override
	public void setUser(User user) {
		this.user = user;
		
	}

	public User getUser() {
		return user;
	}

	/****************************GETTER / SETTER END************************/
}
